如何在 Docker Compose 中设置主机名

您所在的位置:网站首页 docker compose hostname 如何在 Docker Compose 中设置主机名

如何在 Docker Compose 中设置主机名

2024-05-22 16:02| 来源: 网络整理| 查看: 265

如何在 Docker Compose 中设置主机名

在这个 Docker 快速技巧中,您将了解如何通过 Docker Compose 为容器设置主机名。

想知道如何在 Docker Compose 中设置主机名?我会告诉你。

您可以在服务下定义它,如下所示:

... letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion hostname: ledocker ...

但你真的需要那个吗?主机名的总体目标是网络上的计算机相互了解,从而在它们之间进行通信。

同样,这里的主要目标是确保容器可以在 Docker 网络中成功地相互通信。

我将讨论如何实现这一点的两种方法:

方法一:非显式通信

在 Docker 网络中,Docker Compose 文件中定义的服务名称可用于测试容器是否可以相互通信。

以以下反向代理配置为例:

version: '3.7' services: nginx-proxy: image: jwilder/nginx-proxy ports: - "80:80" - "443:443" volumes: - ./html:/usr/share/nginx/html - ./dhparam:/etc/nginx/dhparam - ./vhost:/etc/nginx/vhost.d - ./certs:/etc/nginx/certs:ro - /var/run/docker.sock:/tmp/docker.sock:ro - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" restart: always networks: - net letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion env_file: - ./letsencrypt.env depends_on: - nginx-proxy volumes: - ./certs:/etc/nginx/certs:rw - ./vhost:/etc/nginx/vhost.d - ./html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro restart: always networks: - net networks: net: external: true

请注意,这两个服务名称是 nginx-proxy 和 letsencrypt。您可以使用这些名称来测试容器之间是否可以通信。这在故障排除时会变得非常有帮助。

首先,在 Nginx 反向代理容器内安装 ping:

avimanyu@iborg-desktop:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"

现在,您可以在此容器内使用 ping 命令来检查它是否可以与 Let's Encrypt 容器(用于 SSL)通信。

avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker-compose exec nginx-proxy ping letsencrypt PING letsencrypt (172.18.0.3) 56(84) bytes of data. 64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.066 ms 64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms ^C --- letsencrypt ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 37ms

正如您在上面看到的,反向代理容器“看到”发回响应的第二个 SSL 容器!在 nginx-proxy_letsencrypt_1.net 中,nginx-proxy_letsencrypt_1 是 SSL 容器名称,net 是我们的自定义网络。

我们快速验证一下:

avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9ef56e22f58 jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 7 minutes ago Up 7 minutes nginx-proxy_letsencrypt_1 563133f5d039 jwilder/nginx-proxy "/app/docker-entrypo…" 7 minutes ago Up 7 minutes nginx-proxy_nginx-proxy_1

要验证网络,可以使用 docker network ls 命令。

avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 018c50dc4fdc bridge bridge local 27fd2370e735 net bridge local 38ce8d11227b host host local 2440210d0fc5 none null local 方法二:显式沟通

假设出于某种原因,您想要显式指定容器的主机名。 Docker Compose 也可以让您做到这一点!

使用 hostname 配置选项,您可以为 Docker Compose 文件中定义的任何服务设置不同的主机名,就像我为下面的 Let's Encrypt 服务所做的那样:

version: '3.7' services: nginx-proxy: image: jwilder/nginx-proxy ports: - "80:80" - "443:443" volumes: - ./html:/usr/share/nginx/html - ./dhparam:/etc/nginx/dhparam - ./vhost:/etc/nginx/vhost.d - ./certs:/etc/nginx/certs:ro - /var/run/docker.sock:/tmp/docker.sock:ro - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" restart: always networks: - net letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion hostname: ledocker env_file: - ./letsencrypt.env depends_on: - nginx-proxy volumes: - ./certs:/etc/nginx/certs:rw - ./vhost:/etc/nginx/vhost.d - ./html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro restart: always networks: - net networks: net: external: true

请注意,我已在 Let's Encrypt 服务定义中显式添加了 hostname: ledocker。我想使用 ledocker 作为 SSL 容器的主机名。

但是等等,我们可以使用 ping 命令再次检查吗?

avimanyu@iborg-desktop:~/nextcloud$ sudo docker-compose exec nginx-proxy ping ledocker PING ledocker (172.18.0.3) 56(84) bytes of data. 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.034 ms 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.079 ms 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=4 ttl=64 time=0.093 ms 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=5 ttl=64 time=0.078 ms 64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=6 ttl=64 time=0.075 ms ^C --- ledocker ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 129ms rtt min/avg/max/mdev = 0.034/0.070/0.093/0.018 ms

完全同意。有用!

渴望了解更多这方面的知识吗?查看这个内容极其丰富的 GitHub 线程。

希望您喜欢这个快速提示!您可以在下面的评论部分留下任何疑问、疑问或建议。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3